﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using CondominioG1.Persistencia.NHibernate;
using CondominioG1.Dominio;
//
namespace CondominioG1.Pruebas.TestDAO
{   
    [TestFixture]
    public class TestAreaDAO
    {
        private AreaDAO AreaDAO = new AreaDAO();

        [Test]
        public void TestCrear()
        {

            // 1. Instanciando el objeto DAO a probar
            Area nuevoArea = new Area();
            nuevoArea.Codigo = "A001";
            nuevoArea.Tipo = "Piscina";
            nuevoArea.Ubicacion = "Surco";
            nuevoArea.Capacidad= 15;
            nuevoArea.Estado= "Libre";
            

            // 2. Llamada al método del DAO a probar
            Area AreaCreado = AreaDAO.Crear(nuevoArea);

            // 3. Implementar las validaciones
            Assert.NotNull(AreaCreado);
            Assert.AreEqual(nuevoArea.Codigo, AreaCreado.Codigo);




        }

        [Test]
        public void TestObtener()
        {
            // 1. Instanciamos el objeto TO
            String codigo = "A001";
            // 2. Llamada al método del DAO a probar
            Area AreaObtenido = AreaDAO.Obtener(codigo);
            // 3. Implementar las validaciones
            Assert.NotNull(AreaObtenido);
            Assert.AreEqual(codigo, AreaObtenido.Codigo);
            Assert.NotNull(AreaObtenido.Codigo);
        }
        [Test]
        public void TestModificar()
        {

            // 2. Instanciamos el objeto TO
            Area AreaModificar = new Area();
            AreaModificar.Codigo = "A001";
            AreaModificar.Tipo = "Piscina";
            AreaModificar.Ubicacion = "Surco";
            AreaModificar.Capacidad = 15;
            AreaModificar.Estado = "Reservado";
            // 3. Llamada al método del DAO a probar
            Area AreaObtenido = AreaDAO.Modificar(AreaModificar);
            // 4. Implementar las validaciones
            Assert.NotNull(AreaObtenido);
            Assert.AreEqual(AreaModificar.Codigo, AreaObtenido.Codigo);

        }
        [Test]
        public void TestEliminar()
        {

            // 2. Instanciamos el objeto TO
            Area AreaEliminar = new Area();
            AreaEliminar.Codigo = "A001";
            // 3. Llamada al método del DAO a probar
            Assert.Catch<Exception>(delegate
            {
                AreaDAO.Eliminar(AreaEliminar);
            });
            Assert.DoesNotThrow(delegate
            {
                AreaDAO.Eliminar(AreaEliminar);
            });

            // 4. Implementar las validaciones
            Assert.NotNull(AreaEliminar);
            Assert.NotNull(AreaEliminar.Codigo);


        }
        [Test]
        public void TestListarAreaPorTipo()
        {
            string tipo = "Gimnasio";
            ICollection<Area> LArea = AreaDAO.ListarAreaPorTipo(tipo);
            Assert.NotNull(LArea);
            Assert.Greater(LArea.Count, 1);
        }
    }
}